home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
C64
/
R-Shows
/
(c)sdg.d64
/
character editor
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2007-02-04
|
10KB
|
375 lines
5 REM CUSTOM CHARACTER EDITOR
6 REM FROM
7 REM COMPUTE!'S BOOK OF GRAPHICS
8 REM KEYED IN BY JOHN MOORE
9 REM 1983 12 15
10 REM ** CHANGE SCREEN POINTERS **
20 PRINT CHR$(8);
30 POKE 56578,PEEK(56578)OR3
40 POKE 56576,(PEEK(56576)AND252)OR0
50 POKE53272,(PEEK(53272)AND240)OR2
60 POKE648,196:FF=0
70 REM
80 REM ** TRANSFER CHARACTER SET **
90 REM
100 POKE 56334,PEEK(56334)AND254
110 POKE 1,PEEK(1)AND251
120 FOR R=53248 TO 55296
130 POKER-2048,PEEK(R):NEXT
140 POKE1,PEEK(1)OR4
150 POKE56334,PEEK(56334)OR1
160 REM
170 REM ** DEFINE CHARACTER GRID **
175 LZ$(0)="[207]":LZ$(1)=" [146]"
180 REM
190 CG$=""
195 CF$=""
200 FOR R=0 TO 7
210 CG$=CG$+"[207][207][207][207][207][207][207][207][165][157][157][157][157][157][157][157][157][157]"
215 CF$=CF$+" [146][165][157][157][157][157][157][157][157][157][157]":NEXT
220 CG$ = CG$+"[163][163][163][163][163][163][163][163]"
230 REM
240 REM DEFINE CHARACTER DISPLAY
250 REM
260 CD$="@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
270 CD$=CD$+"\^_ !"+CHR$(34)
280 CD$=CD$+"#$%&'()*+,-./"
290 CD$=CD$+"0123456789:;<=>?[192][193][194][195][196]"
300 CD$=CD$+"[218][219][220][221][255][223] [161][162][163][164][165][166][167][168][170][171][172][173][174]"
310 CD$=CD$+"[197][198][199][200][201][202][203][204][205][206][207][208][209][210][211][212][213][214][215][216][217]"
320 CD$=CD$+"[175][176][177][178][179][180][181][182][183][184][185][186][187][188][189][190][191]"
330 REM
340 REM ** DEFINE FUNCTION KEYS **
350 REM
351 FOR R=1TO30:S$=S$+"":NEXT
360 FORN=1TO8 STEP 2
370 K$(N)="[162][162][162][162][162][157][157][157][157][157] F"+STR$(N)+" [157][157][157][157][157][157][157][146][167][162][162][162][162][162][146] [165]"
380 K$(N+1)="[167][169] F"+STR$(N+1)+" [223][146][165]"
390 P$(N)="[176][192][192][192][174][157][157][157][157][157][194]F"+STR$(N)+"[194][157][157][157][157][157][157][157][146][167] [173][192][192][192][189][146] [165]"
400 P$(N+1)="[167][206] F"+STR$(N+1)+" [205][146][165][157][157][157][157][157][157][157][157][157][148][148][163][163][163][163][163][145]":NEXT
405 REM
410 REM ** DEFINE KEY POSITIONS **
415 REM
420 FOR R=1TO8:K$(R)=""+K$(R):NEXT
430 FORR=1TO7STEP2:K$(R)=""+SP$+K$(R):SP$=SP$+"":NEXT
440 SP$="":FORR=2TO8STEP2:K$(R)=""+SP$+K$(R):SP$=SP$+"":NEXT:SP$=""
450 FORR=1TO8:P$(R)=""+P$(R):NEXT
460 FORR=1TO7STEP2:P$(R)=""+SP$+P$(R):SP$=SP$+"":NEXT
470 SP$="":FORR=2TO8STEP2:P$(R)=""+SP$+P$(R):SP$=SP$+"":NEXT
480 REM
490 REM ** DEFINE MESSAGES **
500 REM
510 M$(1)="EDIT....[157][157][157][157][157][157][157][157]SAVE....[157][157][157][157][157][157][157][157]"
520 M$(1)=M$(1)+"LOAD....[157][157][157][157][157][157][157][157]COPY....[157][157][157][157][157][157][157][157]CLEAR...[157][157][157][157][157][157][157][157]"
530 M$(1)=M$(1)+"FILL....[157][157][157][157][157][157][157][157]WORK....[157][157][157][157][157][157][157][157]FUNCTION"
540 M$(2)="REVERSE.[157][157][157][157][157][157][157][157]INVERT..[157][157][157][157][157][157][157][157]"
550 M$(2)=M$(2)+"FLIP....[157][157][157][157][157][157][157][157]SCROLL R[157][157][157][157][157][157][157][157]SCROLL L[157][157][157][157][157][157][157][157]"
560 M$(2)=M$(2)+"SCROLL U[157][157][157][157][157][157][157][157]SCROLL D[157][157][157][157][157][157][157][157]FUNCTION"
570 REM
580 REM ** DEFINE RULER LINES **
590 REM
600 L$="[192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]"
610 L$=L$+"[192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][178][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]"
620 L$=L$+"[221][157][221][157][221][157][221][157][221][157][221][157][221][157][221][157][221][157][221][157][221][157][221][157][221][157][221]"
630 L$=L$+"[157][221][157][221][157][221][157][221][145][145][145][145][145][145][145][145][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]"
900 REM
910 REM ** DISPLAY EDIT SCREEN **
920 REM
930 PRINT"[147]";CD$:PRINTCG$:PRINTL$:PRINTM$(1)
940 REM
941 REM ** EDIT CHARACTERS **
942 REM
945 A$="@"
1000 REM
1010 REM ** DISPLAY FUNCTION KEYS **
1020 REM
1025 POKE 55753,14
1030 PRINT"";:FOR R=1TO8:PRINTK$(R);:NEXT:PRINT"";
1040 A(0)=1:A(1)=3:A(2)=5:A(3)=7:A(4)=2:A(5)=4:A(6)=6:A(7)=8
1045 GOTO1087
1050 REM
1060 REM ** GET KEYBOARD ENTRY **
1070 REM
1080 PRINT"ENTER FUNCTION: "
1082 GETA$:IFA$=""THEN1080
1084 REM
1085 REM -- SKIP INVALID KEYS --
1086 REM
1087 VA=ASC(A$)
1088 IF (VA<32 OR VA>223)THEN1080
1089 IF (VA>95 AND VA<133)THEN1080
1090 IF (VA>140 AND VA<161)THEN1080
1091 IF (VA>140 OR VA<132)THEN1205
1100 REM
1110 REM -- GET FUNCTION KEYS --
1120 REM
1130 PRINTP$(A(ASC(A$)-133))
1140 FOR R=0TO99:NEXT
1150 PRINTK$(A(ASC(A$)-133));"";
1160 GOTO 1390
1180 REM
1190 REM -- CONVERT TO SCREEN CODE --
1200 REM
1205 LT=VA
1210 IF VA>31 AND VA<64 THEN SC=VA:GOTO1240
1220 IF VA>63 AND VA<193 THEN SC=VA-64: GOTO 1240
1230 IF VA>191 AND VA<224 THEN SC=VA-128: GOTO1240
1240 REM
1250 REM -- DISPLAY EDITED CHARACTER --
1260 REM
1262 LT$=STR$(LT):LT$=RIGHT$(LT$,LEN(LT$)-1)
1265 PRINT"ENTRY MODE: CHR$(";LT$;") "
1270 POKE50633,SC
1273 PRINT"";
1275 PRINT"ENTRY MODE: CHR$(";LT$;") "
1276 POKE 50633,SC
1277 PRINT"";
1278 FOR R=0 TO7
1279 RR=PEEK(R+(51200+8*SC))
1280 PRINTLZ$(ABS((RRAND128)=128));LZ$(ABS((RRAND64)=64));LZ$(ABS((RRAND32)=32));
1281 PRINTLZ$(ABS((RRAND16)=16));LZ$(ABS((RRAND8)=8));LZ$(ABS((RRAND4)=4));
1282 PRINTLZ$(ABS((RRAND2)=2));LZ$(ABS((RRAND1)=1));"[157][157][157][157][157][157][157][157]";:NEXT:GOTO 1080
1350 GOTO 1080
1360 REM
1370 REM -- SPECIAL FUNCTION ROUTINES --
1380 REM
1390 IF FF=1 THEN 1500
1400 ON A(ASC(A$)-133) GOTO 2005,1433,1443,1453,1462,1472,1483,1493
1410 GOTO 1170
1430 REM
1431 REM -- SAVE A CHARACTER SET --
1432 REM
1433 PRINT"SAVE ON CASSETTE OR DISK? (C/D): "
1434 GET Q$:IFQ$=""THEN1434
1435 IF Q$<>"C" AND Q$<>"D" THEN 1087
1436 GOTO 1760
1440 REM
1441 REM -- LOAD A CHARACTER SET --
1442 REM
1443 PRINT"LOAD FROM CASSETE OR DISK? (C/D): "
1444 GET Q$: IF Q$=""THEN 1444
1445 IF Q$<>"C" AND Q$<>"D" THEN 1087
1446 GOTO 1910
1450 REM
1451 REM -- (null) A CHARACTER --
1452 REM
1453 PRINT"ENTER CHARACTER TO COPY: "
1454 GET CA$:IF CA$="" THEN 1454
1455 GOTO 1605
1456 IF CA$="" THEN 1454
1459 GOTO 1275
1460 REM
1461 REM -- CLEAR A CHARACTER --
1462 PRINT"CLEAR CHAR: CHR$(";LT$;") "
1463 H=51200+8*SC
1464 FOR R=H TO H+7: POKE R,0:NEXT
1465 PRINTCG$:GOTO 1080
1470 REM
1471 REM -- FILL A CHARACTER --
1472 PRINT"FILL CHAR: CHR$(";LT$;") "
1473 H=51200+8*SC
1474 FOR R=H TO H+7: POKE R,255: NEXT
1475 PRINT CF$:GOTO 1080
1480 REM
1481 REM -- GOTO WORK SPACE --
1482 REM
1483 PRINT"ENABLE WORK SPACE "
1484 GOTO 2705
1490 REM
1491 REM -- SWITCH FUNCTION SET --
1492 REM
1493 FF=1:PRINTM$(2):GOTO 1080
1499 RETURN
1500 ON A(ASC(A$)-133)GOTO 1523,1532,1542,1551,1561,1572,1582,1593
1510 GOTO 1170
1520 REM
1521 REM -- REVERSE CHARACTER BITS --
1522 REM
1523 PRINT"REVERSE CHARACTER: "
1524 H=51200+8*SC
1525 FOR R=H TO H+7:POKE R,255-PEEK(R):NEXT
1529 GOTO 1275
1530 REM
1531 REM -- INVERT CHARACTER SET --
1532 PRINT"INVERTING CHARACTER: "
1533 H=51200+8*SC
1534 FOR R=H TO H+7: T(R-H)=PEEK(R):NEXT
1535 FOR R=H TO H+7: POKE R,T(7-(R-H)):NEXT:GOTO1275
1540 REM
1541 REM -- FLIP CHARACTERS --
1542 PRINT"FLIPPING CHARACTER: "
1543 FOR U=51200+8*SC TO (51200+8*SC)+7
1544 Z=PEEK(U)
1545 R=128*(ABS((ZAND1)=1))+64*(ABS((ZAND2)=2))+32*(ABS((ZAND4)=4))
1546 R=R+16*(ABS((ZAND8)=8))+8*(ABS((ZAND16)=16))+4*(ABS((ZAND32)=32))
1547 R=R+2*(ABS((ZAND64)=64))+1*(ABS((ZAND128)=128))
1548 POKE U,R
1549 NEXT:GOTO1275
1550 REM -- SCROLL RIGHT --
1551 PRINT"SCROLLING RIGHT: "
1552 FOR U=51200+8*SC TO (51200+8*SC)+7
1553 R=(PEEK(U)/2)
1554 IF PEEK(U)/2<>INT(PEEK(U)/2) THEN R=R+128
1555 POKE U,R
1556 NEXT:GOTO1275
1560 REM -- SCROLL LEFT --
1561 PRINT"SCROLLING LEFT: "
1562 FOR U=51200+8*SC TO (51200+8*SC)+7
1563 R=PEEK(U)*2)
1564 IF PEEK(U)=>128 THEN R=R+1
1565 IF R>255 THEN R=R-256
1566 POKE U,R
1567 NEXT:GOTO1275
1570 REM
1571 REM -- SCROLL UP --
1572 PRINT"SCROLLING UP: "
1573 FOR R=0TO7
1574 Y(R)=PEEK(R+51200+8*SC):NEXT
1575 FOR R=0TO6
1576 POKE R+51200+8*SC, Y(R+1):NEXT
1577 POKE 51207+8*SC, Y(0)
1578 GOTO 1275
1580 REM
1581 REM -- SCROLL DOWN --
1582 PRINT"SCROLLING DOWN: "
1583 FOR R=0TO7
1584 Y(R)=PEEK(R+51200+8*SC):NEXT
1585 FOR R=1TO7
1586 POKE R+51200+8*SC, Y(R-1):NEXT
1587 POKE 51200+8*SC, Y(7)
1589 GOTO 1275
1590 REM
1591 REM -- SWITCH FUNCTION SET --
1592 REM
1593 FF=0:PRINTM$(1):GOTO1080
1599 RETURN
1600 REM
1601 REM ** (null) CHARACTER ROUTINE **
1602 REM
1605 DA=ASC(CA$)
1610 IF (DA<32 OR DA>223) THEN 1456
1620 IF (DA>95 AND DA<133) THEN 1456
1630 IF (DA<141 AND DA>132) THEN A$=CA$:GOTO 1080
1640 IF (DA>140 AND DA<161) THEN RETURN
1650 PRINT"";CA$
1660 IF DA>31 AND DA<64 THEN SD=DA: GOTO 1690
1670 IF DA>63 AND DA<193 THEN SD=DA-64: GOTO 1690
1680 IF DA>191 AND DA<224 THEN SD=DA-128: GOTO 1690
1690 VJ=51200+8*SD:JJ=51200+8*SC
1700 FOR R=0TO7
1710 POKE JJ+R,PEEK(VJ+R):NEXT
1720 GOTO 1456
1730 REM
1740 REM ** SAVE CHAR SET ROUTINE **
1750 REM
1760 PRINT"SAVE:FILE NAME ------.CHR ";
1770 LL=0:NM$=""
1775 FOR R=0TO30:PRINT"-[146][157]";
1780 GET A$:IFA$=""THEN NEXT
1790 IFA$<>""THEN 1840
1800 FOR R=0 TO 30:PRINT"-[157]";
1810 GET A$:IF A$=""THEN NEXT
1820 IF A$<>"" THEN 1840
1830 GOTO 1775
1840 IFA$=CHR$(20)ORA$=CHR$(148)ORA$=CHR$(13) OR A$=CHR$(34) OR A$="[145]"THEN1775
1845 IFA$="" OR A$="" OR A$="[157]" THEN 1775
1847 IF ASC(A$)>132 AND ASC(A$)<141 THEN 1080
1850 PRINT A$;
1855 NM$=NM$+A$:LL=LL+1:IF LL=6 THEN 1870
1860 GOTO 1775
1870 NM$=NM$+".CHR"
1875 IF Q$="C"THEN1890
1880 OPEN1,8,4,NM$+",W"
1885 FOR R=51200 TO 52224
1887 PRINT#1,PEEK(R):NEXT
1889 CLOSE1:GOTO1275
1890 OPEN1,1,1,NM$:GOTO1885
1900 REM
1901 REM ** SAVE CHAR SET ROUTINE **
1902 REM
1910 PRINT"LOAD: FILE NAME ------.CHR ";
1915 LL=0:NM$=""
1920 FOR R=0TO30: PRINT"-[146][157]";
1925 GET A$:IFA$=""THEN NEXT
1930 IFA$<>""THEN 1955
1935 FOR R=0TO30: PRINT"-[157]";
1940 GET A$:IFA$=""THEN NEXT
1945 IFA$<>""THEN 1955
1950 GOTO 1920
1955 IFA$=CHR$(20)ORA$=CHR$(148)ORA$=CHR$(13)ORA$=CHR$(34)ORA$="[145]"THEN 1920
1960 IFA$=""ORA$=""ORA$="[157]"THEN 1920
1965 IF ASC(A$)>132 AND ASC(A$)<141 THEN 1080
1970 PRINTA$;
1975 NM$=NM$+A$:LL=LL+1:IFLL=6THEN1980
1976 GOTO1920
1980 NM$=NM$+".CHR"
1985 IF Q$="C"THEN 1999
1987 OPEN1,8,4,NM$+",R"
1988 FOR R=51200 TO 52224
1989 INPUT#1,VL:POKE R,VL:NEXT
1990 CLOSE1:GOTO 1275
1999 OPEN1,1,1,NM$:GOTO 1885
2000 REM
2001 REM ** CHARACTER EDIT ROUTINE **
2002 REM
2005 PRINT"EDIT MODE: CHR$(";LT$;") "
2010 PRINT"";
2015 LO=50462: SV=PEEK(LO) :SM=(51200+(8*SC)): EX=7 :GT=SC
2020 FOR R=0TO30:POKE LO,SV
2030 GET A$:IFA$=""THEN NEXT
2040 IFA$<>""THEN 2090
2050 FOR R=0TO30: POKE LO,102
2060 GET A$: IFA$=""THEN NEXT
2070 IFA$<>""THEN 2090
2080 GOTO 2020
2090 IFA$="[145]"THEN 2200
2091 IFA$=""THEN 2100
2092 IFA$="[157]"THEN 2300
2093 IFA$=""THEN 2400
2094 IF A$=CHR$(32) AND SV=160 THEN 2500
2095 IF A$=CHR$(32) AND SV=79 THEN 2600
2099 POKE LO,SV:GOTO 1087
2100 POKE LO,102:FOR R=0TO40: NEXT
2110 IF GT=SC+7 THEN 2020
2120 POKE LO,SV:LO=LO+40:GT=GT+1:SV=PEEK (LO):SM=SM+1:GOTO2020
2200 POKE LO,102:FOR R=0TO40:NEXT
2210 IF GT=SC THEN 2020
2220 POKELO,SV:LO=LO-40:GT=GT-1:SV=PEEK(LO):SM=SM-1:GOTO 2020
2300 POKE LO,102:FOR R=0TO40:NEXT
2310 IF EX=7 THEN 2020
2320 POKE LO,SV: LO=LO-1:EX=EX+1:SV=PEEK(LO):GOTO2020
2400 POKE LO,102:FOR R=0TO40: NEXT
2410 IF EX=0 THEN 2020
2420 POKE LO,SV:LO=LO+1:EX=EX-1:SV=PEEK(LO):GOTO 2020
2500 POKE LO,79:POKE SM,PEEK(SM)-(2^EX):SV=79:GOTO 2020
2600 POKE LO,160:POKE SM,PEEK(SM)+(2^EX):SV=160:GOTO2020
2700 REM
2701 REM ** WORK SPACE ROUTINE **
2702 REM
2705 HZ=0:LZ=0
2710 PRINT"";
2720 FOR R=0TO30:PRINT" [146][157]";
2730 GET A$:IF A$=""THEN NEXT
2740 IFA$<>""THEN2790
2750 FOR R=0TO30: PRINT" [157]";
2760 GET A$:IFA$=""THEN NEXT
2770 IFA$<>""THEN 2790
2780 GOTO 2720
2790 IFA$=CHR$(20)ORA$=CHR$(148)ORA$=CHR$(13)ORA$=CHR$(34)THEN2720
2810 IF ASC(A$)>132 AND ASC(A$)<141 THEN PRINT" ";:GOTO 1087
2820 IFA$="[145]" THEN 3200
2830 IFA$="" THEN 3100
2840 IFA$="[157]" THEN 3300
2850 IFA$="" THEN 3400
2860 IF HZ<18 AND LZ<6 THEN PRINTA$;:HZ=HZ+1:GOTO2720
2870 IF HZ=18 AND LZ<6 THEN 2720
2880 IF HZ=18 AND LZ=6 THEN 2720
3100 IF LZ=6 THEN 2720
3110 PRINT" [157]";:LZ=LZ+1:GOTO2720
3200 IF LZ=0 THEN 2720
3210 PRINT" [157][145]";:LZ=LZ-1:GOTO2720
3300 IF HZ=0 THEN 2720
3310 PRINT" [157][157]";:HZ=HZ-1:GOTO 2720
3400 IF HZ=18 THEN 2720
3410 PRINT" [157]";:HZ=HZ+1:GOTO 2720